/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * pnlMantenimientoPerfil.java
 *
 * Created on Oct 17, 2011, 12:11:17 AM
 */

package visual.Seguridad;

import bentity.bePerfil;
import bentity.bePerfilxPrivilegio;
import bentity.bePrivilegio;
import bentity.beUsuario;
import blogic.blLog;
import blogic.blPerfil;
import blogic.blPerfilxPrivilegio;
import blogic.blPrivilegio;
import blogic.blUsuario;
import java.util.ArrayList;
import javax.swing.DefaultListModel;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;

/**
 *
 * @author renzo
 */
public class pnfMantenimientoPerfil extends javax.swing.JPanel {
    private beUsuario usuario = null;

    /** Creates new form pnlMantenimientoPerfil */
    public pnfMantenimientoPerfil(beUsuario usuario) {
        initComponents();
        this.usuario = usuario;
        this.llenarComboPerfil();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        lblPerfil = new javax.swing.JLabel();
        cboPerfil = new javax.swing.JComboBox();
        jScrollPane1 = new javax.swing.JScrollPane();
        lstPrivilegios = new javax.swing.JList();
        lblPrivilegios = new javax.swing.JLabel();
        btnRegistrar = new javax.swing.JButton();
        btnEliminar = new javax.swing.JButton();
        btnModificar1 = new javax.swing.JButton();
        jPanel1 = new javax.swing.JPanel();

        setMinimumSize(new java.awt.Dimension(700, 600));
        setLayout(null);

        jLabel1.setFont(new java.awt.Font("Dialog", 0, 36));
        jLabel1.setForeground(new java.awt.Color(0, 0, 0));
        jLabel1.setText("Mantenimiento de Perfil");
        add(jLabel1);
        jLabel1.setBounds(250, 40, 430, 43);

        lblPerfil.setFont(new java.awt.Font("Dialog", 0, 12)); // NOI18N
        lblPerfil.setForeground(new java.awt.Color(0, 0, 0));
        lblPerfil.setText("Perfil");
        add(lblPerfil);
        lblPerfil.setBounds(220, 160, 31, 15);

        cboPerfil.setFont(new java.awt.Font("DejaVu Sans", 0, 12));
        cboPerfil.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cboPerfilActionPerformed(evt);
            }
        });
        add(cboPerfil);
        cboPerfil.setBounds(330, 160, 317, 25);

        lstPrivilegios.setFont(new java.awt.Font("Dialog", 0, 12));
        jScrollPane1.setViewportView(lstPrivilegios);

        add(jScrollPane1);
        jScrollPane1.setBounds(330, 230, 317, 220);

        lblPrivilegios.setFont(new java.awt.Font("Dialog", 0, 12));
        lblPrivilegios.setForeground(new java.awt.Color(0, 0, 0));
        lblPrivilegios.setText("Privilegios");
        add(lblPrivilegios);
        lblPrivilegios.setBounds(220, 230, 62, 15);

        btnRegistrar.setBackground(new java.awt.Color(240, 235, 226));
        btnRegistrar.setFont(new java.awt.Font("Dialog", 0, 12));
        btnRegistrar.setForeground(new java.awt.Color(0, 0, 0));
        btnRegistrar.setText("Registrar");
        btnRegistrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnRegistrarActionPerformed(evt);
            }
        });
        add(btnRegistrar);
        btnRegistrar.setBounds(260, 530, 110, 27);

        btnEliminar.setBackground(new java.awt.Color(240, 235, 226));
        btnEliminar.setFont(new java.awt.Font("Dialog", 0, 12));
        btnEliminar.setForeground(new java.awt.Color(0, 0, 0));
        btnEliminar.setText("Eliminar");
        btnEliminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEliminarActionPerformed(evt);
            }
        });
        add(btnEliminar);
        btnEliminar.setBounds(560, 530, 110, 27);

        btnModificar1.setBackground(new java.awt.Color(240, 235, 226));
        btnModificar1.setFont(new java.awt.Font("Dialog", 0, 12));
        btnModificar1.setForeground(new java.awt.Color(0, 0, 0));
        btnModificar1.setText("Modificar");
        btnModificar1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnModificar1ActionPerformed(evt);
            }
        });
        add(btnModificar1);
        btnModificar1.setBounds(410, 530, 110, 27);

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Búsqueda de perfiles", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", 0, 14), new java.awt.Color(0, 0, 0))); // NOI18N
        jPanel1.setLayout(null);
        add(jPanel1);
        jPanel1.setBounds(180, 110, 560, 390);
        jPanel1.getAccessibleContext().setAccessibleName("Búsqueda de perfiles");
    }// </editor-fold>//GEN-END:initComponents

    private void btnRegistrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRegistrarActionPerformed
        dlgRegistrarPerfil rgp = new dlgRegistrarPerfil(null, true,this.usuario);
        rgp.setVisible(true);
        this.refrescarComboPerfil();       
}//GEN-LAST:event_btnRegistrarActionPerformed

    private void btnEliminarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEliminarActionPerformed
        // TODO add your handling code here:
        if (visualHelper.mostrarPreguntaSiNo("Esta seguro que desea eliminar el perfil?")==JOptionPane.YES_OPTION){
            String strPerfil="";
            bePerfil perfil = new bePerfil();
            blPerfil gestorPerfiles = new blPerfil();
            blUsuario gestorUsuarios = new blUsuario();            

            try{
                strPerfil = this.cboPerfil.getSelectedItem().toString();
                perfil = gestorPerfiles.queryByNombre(strPerfil);

                if (gestorUsuarios.obtenerUsuarios("", "", perfil.getId())==null){
                        if (gestorPerfiles.eliminar(perfil) == visualHelper.TRANSACCION_EXITOSA){
                            JOptionPane.showMessageDialog(this, "Se eliminó el perfil especificado","Información", JOptionPane.INFORMATION_MESSAGE);
                            (new blLog()).registrarLog(this.usuario.getIdUsuario(), this.usuario.getCargo(), "Se eliminó el perfil: "+perfil.getId()+" - "+perfil.getDescripcion());
                            this.refrescarComboPerfilQuitado();
                        }
                        else
                            visualHelper.mostrarMensajeError("No se puede eliminar el perfil.");

                }else
                    visualHelper.mostrarMensajeAdvertencia("No se puede eliminar el perfil por existir usuarios asignados a este perfil.");
            }
            catch (Exception e){
                e.printStackTrace();
                visualHelper.mostrarMensajeError("Ocurrió un error al eliminar.");
            }
        }
}//GEN-LAST:event_btnEliminarActionPerformed

    private void btnModificar1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnModificar1ActionPerformed
        // TODO add your handling code here:
        dlgModificarPerfil mdp = new dlgModificarPerfil(this, true,this.usuario);
        mdp.setVisible(true);
        this.cboPerfil.setSelectedIndex(0);
}//GEN-LAST:event_btnModificar1ActionPerformed

    private void cboPerfilActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cboPerfilActionPerformed
        // TODO add your handling code here:
        blPerfil gestorPerfiles = new blPerfil();
        blPerfilxPrivilegio blPerfilxPrivilegio = new blPerfilxPrivilegio();
        blPrivilegio gestorPrivilegios = new blPrivilegio();
        bePrivilegio privilegio = new bePrivilegio();
        ArrayList<bePerfilxPrivilegio> listaPerfilxPrivilegios = new ArrayList<bePerfilxPrivilegio>();
                
        bePerfil perfil = gestorPerfiles.queryByNombre(cboPerfil.getSelectedItem().toString());
        listaPerfilxPrivilegios = blPerfilxPrivilegio.queryById(perfil.getId());

        //EL usuario administrador no se debe poder modificar, ni eliminar
        if (perfil.getId()==1){
            this.btnModificar1.setEnabled(false);
            this.btnEliminar.setEnabled(false);
        }else{
            this.btnModificar1.setEnabled(true);
            this.btnEliminar.setEnabled(true);
        }

        DefaultListModel modelo = new DefaultListModel();
        lstPrivilegios.setModel(modelo);
        
        for (int i=0; i<listaPerfilxPrivilegios.size(); i++){
            privilegio = gestorPrivilegios.queryById(listaPerfilxPrivilegios.get(i).getIdPrivilegio());            
            modelo.addElement(privilegio.getDescripcion());
        }        
    }//GEN-LAST:event_cboPerfilActionPerformed

    public void refrescarComboPerfil (){
         //Llenar comobo box de Pefil luego de registrar un cliente
        try{
            blPerfil gestorPerfiles = new blPerfil();
            ArrayList<bePerfil> listaPerfiles = new ArrayList<bePerfil>();
            listaPerfiles = gestorPerfiles.queryAll();
            int nPerfiles = 0;
            boolean encontrado=false;

            for (int i=0; i<listaPerfiles.size(); i++){
                nPerfiles = cboPerfil.getItemCount();
                for (int j=0; j<nPerfiles; j++)
                    if (this.cboPerfil.getItemAt(j).toString().equals(listaPerfiles.get(i).getDescripcion())){
                        encontrado = true;
                        break;
                    }
                if (!encontrado)
                    cboPerfil.addItem(listaPerfiles.get(i).getDescripcion());
                else
                    encontrado=false;

            }
        }
        catch (Exception e){
            e.printStackTrace();
            System.out.print(e.getMessage());
            visualHelper.mostrarMensajeError("Ocurrió un error en la búsqueda de Perfil");
        }
    }

    public void refrescarComboPerfilQuitado (){
         //Llenar comobo box de Pefil luego de registrar un cliente
        try{
            blPerfil gestorPerfiles = new blPerfil();
            ArrayList<bePerfil> listaPerfiles = new ArrayList<bePerfil>();
            listaPerfiles = gestorPerfiles.queryAll();
            int nPerfiles = 0;
            boolean encontrado = false;
            nPerfiles = cboPerfil.getItemCount();

            for (int j=0; j<nPerfiles; j++){
                
                for (int i=0; i<listaPerfiles.size(); i++)
                    if (this.cboPerfil.getItemAt(j).toString().equals(listaPerfiles.get(i).getDescripcion())){
                        encontrado=true;
                        break;
                    }
                 if (!encontrado)
                    this.cboPerfil.removeItemAt(j);
                else
                    encontrado=false;
                nPerfiles = cboPerfil.getItemCount();

            }
        }
        catch (Exception e){
            e.printStackTrace();
            System.out.print(e.getMessage());
            visualHelper.mostrarMensajeError("Ocurrió un error en la búsqueda de Perfil");
        }
    }

    protected void llenarComboPerfil(){
        //Llenar comobo box de Pefil
        try{
            blPerfil gestorPerfiles = new blPerfil();
            ArrayList<bePerfil> listaPerfiles = new ArrayList<bePerfil>();
            listaPerfiles = gestorPerfiles.queryAll();

            for (int i=0; i<listaPerfiles.size(); i++){
                cboPerfil.addItem(listaPerfiles.get(i).getDescripcion());
            }
        }
        catch (Exception e){
            e.printStackTrace();
            System.out.print(e.getMessage());
            visualHelper.mostrarMensajeError("Ocurrió un error en la búsqueda de Perfil");
        }
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnEliminar;
    private javax.swing.JButton btnModificar1;
    private javax.swing.JButton btnRegistrar;
    private javax.swing.JComboBox cboPerfil;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel lblPerfil;
    private javax.swing.JLabel lblPrivilegios;
    private javax.swing.JList lstPrivilegios;
    // End of variables declaration//GEN-END:variables

    public JComboBox getCboPerfil() {
        return cboPerfil;
    }

    public void setCboPerfil(JComboBox cboPerfil) {
        this.cboPerfil = cboPerfil;
    }

}
